﻿using Dapper;
using OMG.Fill.Potato.Model.Ent;
using ProjectShare;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
namespace OMG.Fill.Potato.Services
{
    /// <summary>
    /// 马铃薯项目实施情况统计表通用操作类
    /// </summary>
    public class PotProjects
    {
        /// <summary>
        /// 添加多个
        /// </summary>
        public virtual ResResult<int> AddInfo(List<PotProjectEntity> list) {
            ResResult<int> obj = new ResResult<int>();
            string strSql = @"INSERT INTO dbo.T_PotProject";
            strSql +="(";
            strSql +="Id,";
            strSql +="ReportId,";
            strSql +="ProjectName,";
            strSql +="ProjectSource,";
            strSql +="Age,";
            strSql +="ProjectArrange,";
            strSql +="ProjectSupport,";
            strSql +="PlanArea,";
            strSql +="PlanYield,";
            strSql +="PlanOther,";
            strSql +="ImplePlace,";
            strSql +="FVariety,";
            strSql +="FArea,";
            strSql +="FYield,";
            strSql +="CCArea,";
            strSql +="CCSamples,";
            strSql +="CCVariety,";
            strSql +="CCavgMuYield,";
            strSql +="CCbestMuYield,";
            strSql +="CCdzVariety,";
            strSql +="CCdzAvgMuYield,";
            strSql +="AvgPrice,";
            strSql +="AvgMuInvest,";
            strSql +="AvgMuIncome,";
            strSql +="Townships,";
            strSql +="Villages,";
            strSql +="Farrmers,";
            strSql +="Peoples,";
            strSql +="DDArea,";
            strSql +="unFinishDescribe)";
            strSql +=" values(";
            strSql +="@Id,";
            strSql +="@ReportId,";
            strSql +="@ProjectName,";
            strSql +="@ProjectSource,";
            strSql +="@Age,";
            strSql +="@ProjectArrange,";
            strSql +="@ProjectSupport,";
            strSql +="@PlanArea,";
            strSql +="@PlanYield,";
            strSql +="@PlanOther,";
            strSql +="@ImplePlace,";
            strSql +="@FVariety,";
            strSql +="@FArea,";
            strSql +="@FYield,";
            strSql +="@CCArea,";
            strSql +="@CCSamples,";
            strSql +="@CCVariety,";
            strSql +="@CCavgMuYield,";
            strSql +="@CCbestMuYield,";
            strSql +="@CCdzVariety,";
            strSql +="@CCdzAvgMuYield,";
            strSql +="@AvgPrice,";
            strSql +="@AvgMuInvest,";
            strSql +="@AvgMuIncome,";
            strSql +="@Townships,";
            strSql +="@Villages,";
            strSql +="@Farrmers,";
            strSql +="@Peoples,";
            strSql +="@DDArea,";
            strSql +="@unFinishDescribe)";
            try
            {
                using (var dbCon = ConnectFactory.GetOpenConnection())
                {
                    var trans = dbCon.BeginTransaction();

                    for (int i = 0; i < list.Count; i++)
                    {
                        list[i].Id = CustomFun.GetGuid();
                    }

                    string strDel = "delete from dbo.T_PotProject where ReportId=@ReportId";
                    dbCon.Execute(strDel, new { ReportId = list[0].ReportId }, trans);
                    int result = dbCon.Execute(strSql, list, trans);
                    string strRep = "update dbo.T_Report set Status='2',UpdateTime=@UpdateTime where Id=@ReportId";
                    dbCon.Execute(strRep, new { ReportId = list[0].ReportId, UpdateTime = DateTime.Now }, trans);
                    //提交事务
                    trans.Commit();
                    obj.model = result;
                    obj.status = DefaultKey.SuccessResult;
                    obj.message = "更新成功！";
                    dbCon.Dispose();//数据库连接释放
                    return obj;
                }
            }
            catch (Exception ex)
            {
                obj.status = DefaultKey.ErrorResult;
                obj.message = ex.ToString().Trim();
                LogHelper.ErrorLog("新增马铃薯项目实施情况统计表对象信息失败", ex);
                return obj;
            }
        }
        /// <summary>
        /// 添加单个
        /// </summary>
        public virtual ResResult<int> AddInfo(PotProjectEntity model)
        {
            ResResult<int> obj = new ResResult<int>();
            string strSql = @"INSERT INTO dbo.T_PotProject";
            strSql += "(";
            strSql += "Id,";
            strSql += "ReportId,";
            strSql += "ProjectName,";
            strSql += "ProjectSource,";
            strSql += "Age,";
            strSql += "ProjectArrange,";
            strSql += "ProjectSupport,";
            strSql += "PlanArea,";
            strSql += "PlanYield,";
            strSql += "PlanOther,";
            strSql += "ImplePlace,";
            strSql += "FVariety,";
            strSql += "FArea,";
            strSql += "FYield,";
            strSql += "CCArea,";
            strSql += "CCSamples,";
            strSql += "CCVariety,";
            strSql += "CCavgMuYield,";
            strSql += "CCbestMuYield,";
            strSql += "CCdzVariety,";
            strSql += "CCdzAvgMuYield,";
            strSql += "AvgPrice,";
            strSql += "AvgMuInvest,";
            strSql += "AvgMuIncome,";
            strSql += "Townships,";
            strSql += "Villages,";
            strSql += "Farrmers,";
            strSql += "Peoples,";
            strSql += "DDArea,";
            strSql += "unFinishDescribe)";
            strSql += " values(";
            strSql += "@Id,";
            strSql += "@ReportId,";
            strSql += "@ProjectName,";
            strSql += "@ProjectSource,";
            strSql += "@Age,";
            strSql += "@ProjectArrange,";
            strSql += "@ProjectSupport,";
            strSql += "@PlanArea,";
            strSql += "@PlanYield,";
            strSql += "@PlanOther,";
            strSql += "@ImplePlace,";
            strSql += "@FVariety,";
            strSql += "@FArea,";
            strSql += "@FYield,";
            strSql += "@CCArea,";
            strSql += "@CCSamples,";
            strSql += "@CCVariety,";
            strSql += "@CCavgMuYield,";
            strSql += "@CCbestMuYield,";
            strSql += "@CCdzVariety,";
            strSql += "@CCdzAvgMuYield,";
            strSql += "@AvgPrice,";
            strSql += "@AvgMuInvest,";
            strSql += "@AvgMuIncome,";
            strSql += "@Townships,";
            strSql += "@Villages,";
            strSql += "@Farrmers,";
            strSql += "@Peoples,";
            strSql += "@DDArea,";
            strSql += "@unFinishDescribe)";
            try
            {
                using (var dbCon = ConnectFactory.GetOpenConnection())
                {
                    var trans = dbCon.BeginTransaction();

                    //for (int i = 0; i < list.Count; i++)
                    //{
                    //    list[i].Id = CustomFun.GetGuid();
                    //}

                    //string strDel = "delete from dbo.T_PotProject where ReportId=@ReportId";
                    //dbCon.Execute(strDel, new { ReportId = list[0].ReportId }, trans);
                    //int result = dbCon.Execute(strSql, list, trans);
                    //string strRep = "update dbo.T_Report set Status='2',UpdateTime=@UpdateTime where Id=@ReportId";
                    //dbCon.Execute(strRep, new { ReportId = list[0].ReportId, UpdateTime = DateTime.Now }, trans);
                    ////提交事务
                    //trans.Commit();
                    model.Id = CustomFun.GetGuid();
                    int result = dbCon.Execute(strSql, model,trans);
                    string strRep = "update dbo.T_Report set Status='2',UpdateTime=@UpdateTime where Id=@ReportId and (Status ='0' or Status ='1') ";
                    dbCon.Execute(strRep, new { ReportId =model.ReportId, UpdateTime = DateTime.Now }, trans);
                    //提交事务
                    trans.Commit();
                    obj.model = result;
                    if (result > 0)
                    {
                        obj.status = DefaultKey.SuccessResult;
                        obj.message = "保存成功！";
                    }
                    else
                    {
                        obj.status = DefaultKey.ErrorResult;
                        obj.message = "保存失败！";
                    }
                   
                    dbCon.Dispose();//数据库连接释放
                    return obj;
                }
            }
            catch (Exception ex)
            {
                obj.status = DefaultKey.ErrorResult;
                obj.message = ex.ToString().Trim();
                LogHelper.ErrorLog("新增马铃薯项目实施情况统计表对象信息失败", ex);
                return obj;
            }
        }
        /// <summary>
        /// 修改
        /// </summary>
        public virtual ResResult<int> UpdateInfo(PotProjectEntity model)
        {
            ResResult<int> obj = new ResResult<int>();
            string strSql = @"UPDATE dbo.T_PotProject set ";
            strSql+="ReportId = @ReportId,";
            strSql+="ProjectName = @ProjectName,";
            strSql+="ProjectSource = @ProjectSource,";
            strSql+="Age = @Age,";
            strSql+="ProjectArrange = @ProjectArrange,";
            strSql+="ProjectSupport = @ProjectSupport,";
            strSql+="PlanArea = @PlanArea,";
            strSql+="PlanYield = @PlanYield,";
            strSql+="PlanOther = @PlanOther,";
            strSql+="ImplePlace = @ImplePlace,";
            strSql+="FVariety = @FVariety,";
            strSql+="FArea = @FArea,";
            strSql+="FYield = @FYield,";
            strSql+="CCArea = @CCArea,";
            strSql+="CCSamples = @CCSamples,";
            strSql+="CCVariety = @CCVariety,";
            strSql+="CCavgMuYield = @CCavgMuYield,";
            strSql+="CCbestMuYield = @CCbestMuYield,";
            strSql+="CCdzVariety = @CCdzVariety,";
            strSql+="CCdzAvgMuYield = @CCdzAvgMuYield,";
            strSql+="AvgPrice = @AvgPrice,";
            strSql+="AvgMuInvest = @AvgMuInvest,";
            strSql+="AvgMuIncome = @AvgMuIncome,";
            strSql+="Townships = @Townships,";
            strSql+="Villages = @Villages,";
            strSql+="Farrmers = @Farrmers,";
            strSql+="Peoples = @Peoples,";
            strSql+="DDArea = @DDArea,";
            strSql+="unFinishDescribe = @unFinishDescribe";
            strSql+=" where Id = @Id";
           try
            {
                using (var dbCon = ConnectFactory.GetOpenConnection())
                {
                    int result = dbCon.Execute(strSql, model);
                    if (result > 0)
                    {
                        obj.model = result;
                        obj.status = DefaultKey.SuccessResult;
                        obj.message = "更新成功！";
                    }
                    else
                    {
                        obj.model = result;
                        obj.status = DefaultKey.InfoResult;
                        obj.message = "更新失败！数量为:" + result;
                    }
                    dbCon.Dispose();//数据库连接释放
                    return obj;
                }
            }
            catch (Exception ex)
            {
                obj.status = DefaultKey.ErrorResult;
                obj.message = ex.ToString().Trim();
                LogHelper.ErrorLog("更新马铃薯项目实施情况统计表对象信息失败", ex);
                return obj;
            }
        }
        /// <summary>
        /// 删除
        /// </summary>
        public virtual ResResult<int> DeleteInfo(string id)
        {
            ResResult<int> obj = new ResResult<int>();
            string strSql = @"delete from dbo.T_PotProject where Id = @Id";
            int result;
            try
            {
                using (var dbCon = ConnectFactory.GetOpenConnection())
                {
                    result = dbCon.Execute(strSql, new { Id = id });
                    if (result > 0)
                    {
                        obj.model = result;
                        obj.status = DefaultKey.SuccessResult;
                        obj.message = "删除成功！";
                    }
                    else
                    {
                        obj.model = result;
                        obj.status = DefaultKey.InfoResult;
                        obj.message = "删除失败！数量为:" + result;
                    }
                    dbCon.Dispose();//数据库连接释放
                    return obj;
                }
            }
            catch (Exception ex)
            {
                obj.status = DefaultKey.ErrorResult;
                obj.message = ex.ToString().Trim();
                LogHelper.ErrorLog("删除马铃薯项目实施情况统计表对象信息失败", ex);
                return obj;
            }
        }
        /// <summary>
        /// 批量删除
        /// </summary>
        public virtual ResResult<int> DeleteBatch(string[] ids)
        {
            ResResult<int> obj = new ResResult<int>();
            string strIds = string.Join(",", ids.Select(x => x.ToString()).ToArray());
            string strSql = @"delete from dbo.T_PotProject where Id in @ids";
            var dynamicSqlParam = new DynamicParameters();
            dynamicSqlParam.Add("ids", ids.ToArray(), null, null, null);
            int result;
            try
            {
                using (var dbCon = ConnectFactory.GetOpenConnection())
                {
                    result = dbCon.Execute(strSql, dynamicSqlParam);
                    if (result > 0)
                    {
                        obj.model = result;
                        obj.status = DefaultKey.SuccessResult;
                        obj.message = "删除成功！";
                    }
                    else
                    {
                        obj.status = DefaultKey.InfoResult;
                        obj.message = "删除失败！数量为:" + result;
                    }
                    dbCon.Dispose();//数据库连接释放
                    return obj;
                }
            }
            catch (Exception ex)
            {
                LogHelper.ErrorLog("获取数据字典表批量删除马铃薯项目实施情况统计表表失败", ex);
                obj.message = ex.ToString().Trim();
                obj.status = DefaultKey.ErrorResult;
                return obj;
            }
        }
        /// <summary>
        /// 获取指定对象
        /// </summary>
        public virtual ResResult<List<PotProjectEntity>> GetModel(string ReportId) {
            ResResult<List<PotProjectEntity>> obj = new ResResult<List<PotProjectEntity>>();
            List<PotProjectEntity> list = new List<PotProjectEntity>();
            ReportServices reportService = new ReportServices();
            string strSql = @"select * from dbo.T_PotProject where ReportId = @ReportId";
            try
            {
                using (var dbCon = ConnectFactory.GetOpenConnection())
                {
                    if (reportService.CheckRepCount(ReportId, "T_PotProject"))
                    {
                        PotProjectEntity entity = new PotProjectEntity();
                        entity.ReportId = ReportId;
                        list.Add(entity);
                    }
                    else
                    {
                        list = dbCon.Query<PotProjectEntity>(strSql, new { ReportId = ReportId }).ToList();
                    }
                    obj.model = list;   
                    obj.status = DefaultKey.SuccessResult;
                    obj.message = "获取成功！";
                    dbCon.Dispose();//数据库连接释放
                    return obj;
                }
            }
            catch (Exception ex)
            {
                obj.status = DefaultKey.ErrorResult;
                obj.message = ex.ToString().Trim();
                LogHelper.ErrorLog("获取马铃薯项目实施情况统计表对象信息失败", ex);
                return obj;
            }
        }
        /// <summary>
        /// 获取全部列表
        /// </summary>
        /// <returns></returns>
        public virtual ResResult<List<PotProjectEntity>> GetList()
        {
            ResResult<List<PotProjectEntity>> obj = new ResResult<List<PotProjectEntity>>();
            string strSql = @"select * from dbo.T_PotProject";
            try
            {
                using (var dbCon = ConnectFactory.GetOpenConnection())
                {
                    obj.model = dbCon.Query<PotProjectEntity>(strSql).ToList();
                    obj.status = DefaultKey.SuccessResult;
                    obj.message = "获取成功！";
                    dbCon.Dispose();//数据库连接释放
                    return obj;
                }
            }
            catch (Exception ex)
            {
                obj.status = DefaultKey.ErrorResult;
                obj.message = ex.ToString().Trim();
                LogHelper.ErrorLog("更新马铃薯项目实施情况统计表对象信息失败", ex);
                return obj;
            }
        }
    }
}